feat: support multi-block conditions with declarative object syntax#3497
Draft
feat: support multi-block conditions with declarative object syntax#3497
Conversation
|
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…sing @slot markers Co-authored-by: anubra266 <30869823+anubra266@users.noreply.github.com>
…, improve docs Co-authored-by: anubra266 <30869823+anubra266@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Add support for multi-block conditions with at-rules
feat: support multi-block conditions with declarative object syntax
Mar 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📝 Description
Adds a new object syntax for conditions that generates multiple independent CSS blocks from a single condition. Uses
@slotmarkers to define where styles are inserted within each block.⛳️ Current behavior (updates)
Conditions only support
stringorstring[]formats, which nest into a single CSS block. No way to define a condition that produces two independent at-rule blocks — forcing users to either duplicate styles across two conditions or create per-property utilities withtransform().🚀 New behavior
New object syntax with
@slotmarkers:Single-block objects degrade to a
MixedCondition, identical to existing array syntax.Key changes:
packages/types/src/conditions.ts—MultiBlockConditiontype,ConditionObjectQuerytype,ConditionQueryunion updatedpackages/core/src/parse-condition.ts—parseObjectCondition()recursively collects paths to@slotmarkers, each becoming an independent blockpackages/core/src/style-decoder.ts—expandMultiBlock()splits multi-block conditions into separate condition sets at decode time, reusing the same class selector across blockspackages/core/src/sort-style-rules.ts—hasAtRule/flattenhandlemulti-blocktypepackages/config/src/validation/validate-condition.ts— recursive validation for object syntaxpackages/generator/src/artifacts/js/conditions.ts— JSDoc generation handles object values💣 Is this a breaking change (Yes/No):
No. Additive — existing
stringandstring[]conditions are unaffected.📝 Additional Information
Object nesting is recursive, so deeper structures work too. The parser collects every root-to-
@slotpath as an independent block. Same-media blocks are merged by PostCSS as expected.Original prompt
🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.